// 正则匹配,用于邮箱,手机号,用户名,密码等 格式校验

/**
 * @param {string} path
 * @returns {Boolean}
 */
export function isExternal(path) {
  return /^(https?:|mailto:|tel:)/.test(path)
}

// 校验真实姓名正则
export function validRealname(str) {
  const reg = /^[\u4e00-\u9fa5]{2,6}$/
  return reg.test(str)
}

// 校验用户名: 接收一个str型的用户名, 返回 Boolean
export function validUsername(str) {
  const valid_map = ['admin', 'editor']
  return valid_map.indexOf(str.trim()) >= 0
}

// 校验url
export function validURL(url) {
  // const reg = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/
  const reg = /^(?![A-Za-z0-9]+$)(?![a-z0-9\W]+$)(?![A-Za-z\W]+$)(?![A-Z0-9\W]+$)[a-zA-Z0-9\W]{8,16}$/
  return reg.test(url)
}

/**
 * @param {string} str
 * @returns {Boolean}
 */
export function validLowerCase(str) {
  const reg = /^[a-z]+$/
  return reg.test(str)
}

/**
 * @param {string} str
 * @returns {Boolean}
 */
export function validUpperCase(str) {
  const reg = /^[A-Z]+$/
  return reg.test(str)
}

/**
 * @param {string} str
 * @returns {Boolean}
 */
export function validAlphabets(str) {
  const reg = /^[A-Za-z]+$/
  return reg.test(str)
}

// 校验海拔
export function validaltitude(val) {
  const patt = /^(([1-9]+[0-9]*.{1}[0-9]+)|([0].{1}[1-9]+[0-9]*)|([1-9][0-9]*)|([0][.][0-9]+[1-9]*))$/
  return patt.test(val)
}

// 校验经度
export function validlongitude(val) {
  const patt = /^(\-|\+)?(((\d|[1-9]\d|1[0-7]\d|0{1,3})\.\d{0,6})|(\d|[1-9]\d|1[0-7]\d|0{1,3})|180\.0{0,6}|180)$/
  return patt.test(val)
}

// 校验纬度
export function validlatitude(val) {
  const patt = /^(\-|\+)?([0-8]?\d{1}\.\d{0,6}|90\.0{0,6}|[0-8]?\d{1}|90)$/
  return patt.test(val)
}

// 校验邮箱   /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
export function validEmail(email) {
  const reg = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
  return reg.test(email)
}

// 统一社会信用代码, 校验
export function validSocialCredit(val) {
  const patt = /^([0-9A-HJ-NPQRTUWXY]{2}\d{6}[0-9A-HJ-NPQRTUWXY]{10}|[1-9]\d{14})$/
  return patt.test(val)
}

// 地址校验规则
export function validAddress(val) {
  const patt = /^([A-Za-z\u4E00-\u9FA5])[0-9A-Za-z\u4E00-\u9FA5\uf900-\ufa2d·s_\-\。\、\.]{9,49}$/
  return patt.test(val)
}

// 校验是否为字符串
export function isString(str) {
  if (typeof str === 'string' || str instanceof String) {
    return true
  }
  return false
}

// 校验是否为数组
export function isArray(arg) {
  if (typeof Array.isArray === 'undefined') {
    return Object.prototype.toString.call(arg) === '[object Array]'
  }
  return Array.isArray(arg)
}

// 校验手机号
export function validMobile(val) {
  const patt = /^(0|86|17951)?(13[0-9]|14[5-9]|15[012356789]|166|17[0-9]|18[0-9]|19[8-9])[0-9]{8}$/
  return patt.test(val)
}

// 座机号 校验规则
export function validFixed(val) {
  const patt = /^(0[0-9]{2,3}\-)([2-9][0-9]{6,7})+(\-[0-9]{1,4})?$/
  return patt.test(val)
}

// 角色名:  只能是字母和数字的组合
export function validRoleName(str) {
  // const reg = /(?!^\d+$)(?!^[a-zA-Z]+$)[0-9a-zA-Z]{2,16}/
  const reg = /[0-9a-zA-Z][^\u4E00-\u9FA5]{3,16}/
  return reg.test(str)
}
// 至少6-16个字符，至少有一个大写字母和一个数字，不能有三个相同的字符，特殊字符包括~!@&$%^*()_#
export function validPass(str) {
  const reg = /^(?![A-Za-z]+$)(?![A-Z0-9]+$)(?![a-z0-9]+$)(?![a-z\W_!@#$%^&*`~()-+=]+$)(?![A-Z\W_!@#$%^&*`~()-+=+$)(?![0-9\W_!@#$%^&*`~()-+=]+$)[a-zA-Z0-9\W_!@#$%^&*`~()-+=]{6,16}$/
  return reg.test(str)
}

// 32个字符，至少有一个大写字母和一个数字，不能有三个相同的字符，特殊字符包括~!@&$%^*()_#
export function validPassKey(str) {
  const reg = /^(?![A-Za-z]+$)(?![A-Z0-9]+$)(?![a-z0-9]+$)(?![a-z\W_!@#$%^&*`~()-+=]+$)(?![A-Z\W_!@#$%^&*`~()-+=+$)(?![0-9\W_!@#$%^&*`~()-+=]+$)[a-zA-Z0-9\W_!@#$%^&*`~()-+=]{32}$/
  return reg.test(str)
}
// 24个字符，至少有一个大写字母和一个数字，不能有三个相同的字符，特殊字符包括~!@&$%^*()_#
export function validPassId(str) {
  const reg = /^(?![A-Za-z]+$)(?![A-Z0-9]+$)(?![a-z0-9]+$)(?![a-z\W_!@#$%^&*`~()-+=]+$)(?![A-Z\W_!@#$%^&*`~()-+=+$)(?![0-9\W_!@#$%^&*`~()-+=]+$)[a-zA-Z0-9\W_!@#$%^&*`~()-+=]{24}$/
  return reg.test(str)
}

// 用户名: 3 - 16字母和数字
export function validUser(str) {
  // const reg = /[0-9a-zA-Z][^\u4E00-\u9FA5]{2,16}/
  const reg = /^([a-zA-Z])[0-9a-zA-Z]{2,15}$/
  return reg.test(str)
}

// 15, 18 位 身份证
export function validIdCard(str) {
  const reg = /(^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$)|(^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{2}$)/
  return reg.test(str)
}
